--
-- Author: mm
-- Date: 2018-03-19 14:55:37
--
-- NewguildChallengeRender 对应 Node_challenge_list.csb
-- 挑战render

local IconRender = require("app.widget.renders.IconRender")

local ClassRef = app.mvc.createRenderClass(...)

local challengeName = {
    L("guild_challenge1"),
    L("guild_challenge2"),
    L("guild_challenge3"),
    L("guild_challenge4"),
    L("guild_challenge5"),
}
local RewardBoxName = {
    L("guild_challenge_box1"),
    L("guild_challenge_box2"),
    L("guild_challenge_box3"),
    L("guild_challenge_box4"),
    L("guild_challenge_box5"),
}

function ClassRef.createWithData(data, node)
    local sprite = ClassRef.extend(node or cc.CSLoader:createNode(Res.NewGuildChallengeNode))
    if node == nil then
        ccui.Helper:doLayout(sprite)
    end
    sprite:init(data)
    return sprite
end
function ClassRef.create(node)
    return ClassRef.createWithData(nil, node)
end

--
function ClassRef:init(data)
    self.super.init(self, data)

    self:setContentSize(self._ui.Panel:getContentSize())

    self._taskHead = IconRender.create( self._ui.icon )
    self._taskHead:setClickEnable( false )

    display.uiAddClick(self._ui.Panel, function()
        local tipsStr = nil
        local curChallengeIdx = self._data[2] -- 当前挑战数据位置索引
        local dataTemp = self._data[1][ curChallengeIdx ]
        if dataTemp then -- 存在任务数据？（已解锁？）
            tipsStr = L("guild_challenge_tips3")
        end
        if tipsStr then
            local posTemp_1 = self._ui.text:convertToWorldSpace(cc.p(0,0))
            local posTemp_2 = self._ui.Panel:convertToWorldSpace(cc.p(0,0))
            local width_2 = self._ui.Panel:getContentSize2()
            -- 此处加的常量都是UI中预定义的高度。
            local posTemp = cc.p( posTemp_2.x-315.00/2+width_2/2, posTemp_1.y+110 )
            if string.find( tipsStr, "\n" ) then
                posTemp = cc.p( posTemp_2.x-315.00/2+width_2/2, posTemp_1.y+110 )
            else
                posTemp = cc.p( posTemp_2.x-315.00/2+width_2/2, posTemp_1.y+80 )
            end
            executeFunc(self._onClick, "showTips_challenge", { challengeName[ curChallengeIdx ], tipsStr, posTemp })
        end
    end)

    display.uiAddClick(self._ui.Panel_bom, function()
        local tipsStr = nil
        local curChallengeIdx = self._data[2] -- 当前挑战数据位置索引
        local dataTemp = self._data[1][ curChallengeIdx ]
        if dataTemp then -- 存在任务数据？（已解锁？）
            if dataTemp:isCompleted() then -- 已经完成？
                if not dataTemp:hadGotReward() then -- 未领取奖励？
                    executeFunc(self._onClick, "getChallengeReward", dataTemp)
                end
            else -- 未完成？
                tipsStr = L("guild_challenge_tips1")
            end
        else -- 任务都没产生（未解锁）
            local preChallengeIdx = curChallengeIdx - 1
            if 0 < preChallengeIdx then -- 存在前置挑战？
                local preChallengeData = self._data[1][ preChallengeIdx ]
                if preChallengeData then -- 前置挑战数据存在？（已解锁）
                    if preChallengeData:isCompleted() then -- 前置已完成?
                        tipsStr = L("guild_challenge_tips1")
                    else
                        tipsStr = L("guild_challenge_tips2")
                    end
                else
                    tipsStr = L("guild_challenge_tips2")
                end
            end
        end
        if tipsStr then
            local _, height_1 = self._ui.Panel_bom:getContentSize2()
            local posTemp_2 = self._ui.Panel:convertToWorldSpace(cc.p(0,0))
            local width_2 = self._ui.Panel:getContentSize2()
            -- 此处加的常量都是UI中预定义的高度。
            local posTemp = cc.p( posTemp_2.x-315.00/2+width_2/2, height_1+110 )
            if string.find( tipsStr, "\n" ) then
                posTemp = cc.p( posTemp_2.x-315.00/2+width_2/2, height_1+110 )
            else
                posTemp = cc.p( posTemp_2.x-315.00/2+width_2/2, height_1+80 )
            end
            executeFunc(self._onClick, "showTips_challenge", { RewardBoxName[ curChallengeIdx ], tipsStr, posTemp })
        end
    end)

    self:refresh()
end

-- data = { dataTemp, i }
-- dataTemp = { challengeVo, challengeVo,, }
function ClassRef:refresh()
    if self._data then
        self:setVisible( true )

        local curChallengeIdx = self._data[2] -- 当前挑战数据位置索引
        local data = self._data[1][ curChallengeIdx ]
        local iconName = string.format("%s%s%d.png",Res.guildIconPath,"ghchest_",curChallengeIdx)
        self._ui.Panel_bom:findChild("icon/icon"):loadTexture(iconName)
        self._ui.Panel_unopen:findChild("icongray"):loadTexture(iconName)
        self._ui.Panel_unopen:findChild("icongray_mask"):loadTexture(iconName)

        if data then -- 已有数据？（已解锁？）
            self._ui.tlt:setString( data:getChallengeName() ) -- 挑战名字（青铜、白银、、）
            self._taskHead:setIcon( data:getChallengeIcon() ) -- 挑战任务图标
            self._taskHead:setIconKuang( data:getChallengeQualityIcon() ) -- 挑战任务品质
            self._taskHead:setNumBgVisible( false )
            self._taskHead:setLevel()

            -- 奖励领取状态
            self._ui.Panel_unopen:setVisible( false )
            self._ui.icon_over:setVisible( data:hadGotReward() )
            self._ui.Panel_bom:setVisible( not data:hadGotReward() )

            -- 完成状态
            self._ui.Panel_bom:findChild( "icon/light" ):setVisible( data:isCompleted() )
            self._ui.Panel_bom:findChild( "bg" ):setVisible( data:isCompleted() )
            self._ui.Panel_bom:findChild( "tips" ):setVisible( data:isCompleted() )
            self._ui.Panel_bom:findChild( "Panel_bar" ):setVisible( not data:isCompleted() )
            self._ui.Panel_bom:findChild( "lock" ):setVisible( not data:isCompleted() )
            if data:isCompleted() then -- 完成？
                -- 宝箱动画处理
                self:getTimeline():gotoFrameAndPlay(0,true)
                -- 进度文本
                self._ui.text:setString( L("guild_challenge_desc5") )
            else
                -- 宝箱动画处理
                self:getTimeline():gotoFrameAndPause(0)
                -- 处理进度条
                local curProgress = data:getCompleteProcess()
                local maxProgress = data:getCompleteProcessMax()
                self._ui.Panel_bom:findChild( "Panel_bar/num" ):setString( table.concat( { curProgress, "/", maxProgress } ) )
                self._ui.Panel_bom:findChild( "Panel_bar/LoadingBar" ):setPercent( curProgress/maxProgress*100 )
                -- 进度文本
                local myProcess = data:getMyProcess()
                local myMaxProcess = data:getMyMaxProcess()
                local strTemp = table.concat( { data:getChallengeDesc(), "\n", "(", myProcess, "/", myMaxProcess, ")" } )
                self._ui.text:setString( strTemp ) -- 挑战说明
            end
        else
            self:getTimeline():gotoFrameAndPause(0)
            self._ui.Panel_unopen:setVisible( true )
            self._ui.tlt:setString( challengeName[ curChallengeIdx ] ) -- 挑战名字（青铜、白银、、）
            local preChallengeIdx = curChallengeIdx - 1
            if 0 < preChallengeIdx then -- 存在前置挑战？
                local preChallengeData = self._data[1][ preChallengeIdx ]
                if preChallengeData then -- 前置挑战数据存在？（已解锁）
                    if preChallengeData:isCompleted() then -- 前置已完成?
                        local date = app.session:getServerDate()
                        if date.wday == 1 then
                            self._ui.text:setString( L("guild_challenge_desc2") )
                        else
                            self._ui.text:setString( L("guild_challenge_desc1") )
                        end
                    else
                        self._ui.text:setString( string.format( L("guild_challenge_desc3"), preChallengeData:getChallengeName() ) )
                    end
                else
                    self._ui.text:setString( string.format( L("guild_challenge_desc3"), challengeName[ preChallengeIdx ] ) )
                end
            else
                self._ui.text:setString( L("guild_challenge_desc4") )
            end
        end
    else
        self:setVisible( false )
    end
end

function ClassRef:onBtnClick(cb)
    self._onClick = cb
end

return ClassRef
